# 工具链配置
# CC        := arm-linux-gnueabihf-gcc
CC        := gcc
TARGET    := app_demo.out

# 路径配置
SRC_DIR   := .
BUILD_DIR := build
DEP_DIR   := $(BUILD_DIR)/.deps

# 自动扫描源文件
SRCS_C    := $(wildcard $(SRC_DIR)/*.c)
SRCS_CPP  := $(wildcard $(SRC_DIR)/*.cpp)
OBJS      := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(SRCS_C)) \
             $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(SRCS_CPP))

# 编译参数
CFLAGS    := -Wall
CFLAGS    += -I$(SRC_DIR) -MMD -MP -MF $(DEP_DIR)/$*.d  # 自动生成依赖
LDFLAGS   := -lstdc++

# 创建构建目录
$(shell mkdir -p $(BUILD_DIR) >/dev/null)
$(shell mkdir -p $(DEP_DIR) >/dev/null)

# 默认目标
all: $(TARGET)

# 链接可执行文件
$(TARGET): $(OBJS)
	$(CC) $^ -o $@ $(LDFLAGS)

# C 编译规则
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c | $(DEP_DIR)
	$(CC) $(CFLAGS)  -c $< -o $@

# C++ 编译规则
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp | $(DEP_DIR)
	$(CC) $(CFLAGS) -c $< -o $@

# 包含自动生成的依赖文件
-include $(wildcard $(DEP_DIR)/*.d)

# 清理
clean:
	rm -rf $(BUILD_DIR) $(TARGET) *.o *.out

.PHONY: all clean
